package com.stefanie.study.sp;

import lombok.Data;

/**
 * @author: stefanie-zy
 * @time: 2024/6/26-16:25
 * @description: 单例模式-懒汉模式
 */
@Data
public class UserB {

    /**
     * “懒汉模式”系统在初始化的时候不创建实例，只有在使用的时候才创建。
     * <p>
     * 这样更好地节省服务器启动资源，使得效率更高
     * <p/>
     */

    // 属性
    private String name;
    private Integer age;
    private String address;

    // 私有化构造方法
    private UserB() {
        this.name = "Stefanie-Zy";
        this.address = "陕西省西安市";
        this.age = 1;
    }

    // 私有化成员变量，成为唯一实例
    private static UserB user = null;

    // 对外提供方法-多线程最佳写法
    public static UserB getSingleton() {
        if (user == null) {
            // 避免多线程同时调用
            synchronized (UserB.class) {
                // 现成等待之后判断其他线程是否已经创建
                if (user == null) {
                    user = new UserB();
                }
            }
        }
        return user;
    }

}
